

%-----------------------------------------------------------------------
% Generation des possibilites




%coups possibles
% => coups régulier
%   => triche de mana
%coups_possibles(EtatsDesPieces,Joueur,ListeCoups) :- setof(Coup,coup_regulier(EtatsDesPieces,Joueur,Coup),ListeCoups),!.


% structure de Coups :
% [[coord pion, [coord coups possibles, ...]], ...]
%liste_coups_reguliers(Pieces, Joueur, Coups) :-

liste_coups_reguliers([], _, R) :- R= "",!.

liste_coups_reguliers([[X,Y]|Q], Joueur, [T2|Q2]) :-
	valeurplateau(X,Y,R1),
	coups_reguliers_pos(X,Y,R1, Joueur,[X,Y], R2),!,
	T2 = [[X,Y],R2],
	liste_coups_reguliers(Q, Joueur, Q2).
	
	


% coupsreguliers_pos
% coordonnee1 coordonnee2 valeur joueur coups-interdit retour 
% Depart : coups interdit = coord1 coord2

coups_reguliers_pos(X,_,_,_,_,_) :- element(X,[0,7]),!. %definition des coups hors champs.
coups_reguliers_pos(_,Y,_,_,_,_) :- element(Y,[0,7]),!.

coups_reguliers_pos(X,Y,_,_,[[X|Y]|_],_):-!. %coups interdit retour en arrière

coups_reguliers_pos(X,Y,0, Joueur,_,R):-
	R = [[X,Y]],!. %renvoi de la valeur
	%TODO
		%SI personne à moi dessus
	
coups_reguliers_pos(X,Y,V,Joueur,[T1|T2],R):-
	Vt is V-1,
	X1 is T1-1,
	X2 is T1+1,
	Y1 is T2-1,
	Y2 is T2+1,
	L = [X,Y],
	coups_reguliers_pos(X1, Y, Vt, Joueur, L, R1), %on appel les 4 cotés
	coups_reguliers_pos(X, Y1, Vt, Joueur, L, R2),
	coups_reguliers_pos(X2, Y, Vt, Joueur, L, R3),
	coups_reguliers_pos(X, Y2, Vt, Joueur, L, R4),
	append(R1,R2,RT1),
	append(R3,R4,RT2),
	append(RT1,RT2,R).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% coupstriche

coupstriches_pos(Joueur,R) :-
%TODO	
	mana(M),
	case_par_valeur_plateau(M,Listecases),
%TODO	%enlever les cases où l'on à une pièce
%	mindistance(Listecases,R).
	R = Listecases.
	
	





%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%calcul la distance géographique d'une case à l'autre

distance([X1,Y1], [X2,Y2], R) :-
	R1 is X1 - X2,
	R2 is Y1 - Y2,
	R is abs(R1) + abs(R2).

mindistance(Liste, Case, R) :- mindistance_2(Liste, Case, [_|R]).

mindistance_2([], _, R,_) :- R = 12,!.
mindistance_2([[X1,Y1]|Q2],[X2,Y2], [R,Coor]):-
	distance([X1,Y1], [X2,Y2], R1),
	mindistance(Q2, [X2,Y2], [R2,Coor2]),
	minimumcoor([R2,Coor2], [R1,[X1,Y1]], [R,Coor]). %on revoit soit notre valeur soit celle plus petite obtenu precedement
	

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%calcul la distance nécessaire pour arriver d'une case à une autre

distance_en_coups([X1,Y1], [X2,Y2], R) :- distance_en_coups_2([[X1,Y1]], [X2,Y2], 2,2, 0, R).

distance_en_coups_2(_,_, Max, _, Max, _):-!.

distance_en_coups_2([[X,Y]|_], [X,Y], _,MaxV, Val, Val):-
	Val < MaxV.

distance_en_coups_2([[X1,Y1]|Q], [X2,Y2], Maxprof, MaxVal, Val, [T|Q]):-
	plateau(P),
%TODO	%Recupération de la valeur du mana
	valeur(P,2,2,Valeur), %temporaire
	coups_reguliers_pos(X1,Y1, Valeur, [X1,Y1], ListeCoups),
	Val1 is Val +1,
	%enlever_doublons([Q,ListeCoups],R),
	distance_en_coups_2(ListeCoups, [X2,Y2], Maxprof, MaxVal, Val1, T),
	distance_en_coups_2(Q, [X2,Y2], Maxprof, MaxVal, Val, Q),!.
